package utils;

import java.util.ResourceBundle;

//读取配置文件，创建对象
//方法定义为静态，返回任意对象
//方法有参数：传递要创建的对象实现的接口，写接口的class对象
public class BeanFactory {
    public static <T> T getInstance(Class<T> clazz){
        T obj = null;
        try {
            //获取接口名 Class类方法：getSimpleName() 获取class文件对象的类名或者是接口名
            //simpleName = AccountService 是配置文件的键名
            String simpleName = clazz.getSimpleName();
            //读取配置文件，获取键对应的值
            //使用类ResourceBundle，专门处理properties文件
            //ResourceBundle类静态方法，getBundle(要读取的文件名),返回ResourceBundle类的对象
            ResourceBundle bundle = ResourceBundle.getBundle("bean");
            //bundle对象的方法 getString(键名) 返回键对应的值
            String className = bundle.getString(simpleName);
            //反射创建该类的对象
            Class cla = Class.forName(className);
            obj = (T) cla.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }
}
